﻿package com.sp.pay.common;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;

public class FileRW {


	String addtime=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date());
	
	 /**
     * 1. 演示将流中的文本读入一个 StringBuffer 中
     * @throws IOException
     */
    public void readToBuffer(StringBuffer buffer, InputStream is)
        throws IOException {
        String line;        // 用来保存每行读取的内容
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        line = reader.readLine();       // 读取第一行
        while (line != null) {          // 如果 line 为空说明读完了
            buffer.append(line);        // 将读到的内容添加到 buffer 中
            buffer.append("\n");        // 添加换行符
            line = reader.readLine();   // 读取下一行
        }
    }

    /**
     * 2. 演示将 StringBuffer 中的内容读出到流中
     */
    public void writeFromBuffer(StringBuffer buffer, OutputStream os) {
        // 用 PrintStream 可以方便的把内容输出到输出流中
        // 其对象的用法和 System.out 一样
        // （System.out 本身就是 PrintStream 对象）
        PrintStream ps = new PrintStream(os);   
        ps.print(buffer.toString());
    }

    /**
     * 3*. 从输入流中拷贝内容到输入流中
     * @throws IOException
     */
    public void copyStream(InputStream is, OutputStream os) throws IOException {
        // 这个读过过程可以参阅 readToBuffer 中的注释
        String line;
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(os));
        line = reader.readLine();
        while (line != null) {
            writer.println(line);
            line = reader.readLine();
        }
        writer.flush();     // 最后确定要把输出流中的东西都写出去了
                            // 这里不关闭 writer 是因为 os 是从外面传进来的
                            // 既然不是从这里打开的，也就不从这里关闭
                            // 如果关闭的 writer，封装在里面的 os 也就被关了
    }

    /**
     * 3. 调用 copyStream(InputStream, OutputStream) 方法拷贝文本文件
     */
    public void copyTextFile(String inFilename, String outFilename)
        throws IOException {
        // 先根据输入/输出文件生成相应的输入/输出流
        InputStream is = new FileInputStream(inFilename);
        OutputStream os = new FileOutputStream(outFilename);
        copyStream(is, os);     // 用 copyStream 拷贝内容
        is.close(); // is 是在这里打开的，所以需要关闭
        os.close(); // os 是在这里打开的，所以需要关闭
    }

    /**  
     * 追加文件：使用FileOutputStream，在构造FileOutputStream时，
     * 把第二个参数设为true  表示以追加形式写文件 
     *   
     * @param fileName  
     * @param content  
     */  
    public static void method1(String file, String conent) {   
        BufferedWriter out = null;   
        //System.out.println("文件 = " + file );
        try {  
        	File files=new File(file);
        	if(!files.exists())
        	{
        		System.out.println("文件不存在= " + files.canWrite() );
        	}
            out = new BufferedWriter(new OutputStreamWriter(   
                    new FileOutputStream(file, true)));  
            out.write(conent);   
        } catch (Exception e) {   
            e.printStackTrace();   
        } finally {   
            try {   
                out.close();   
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
        }   
    }   
  
    /**  
     * 重写文件：使用FileWriter  
     *   
     * @param fileName  
     * @param content  
     */  
    public static void method2(String fileName, String content) {   
        try {   
            // 打开一个写文件器，构造函数中的第二个参数false表示重写文件   
            FileWriter writer = new FileWriter(fileName, false); 
            //System.out.println("fileName= " +fileName+ " content=" + content);
            //content = new String(content.getBytes("utf-8"), "gbk");
            
            writer.write(content);   
            writer.close();   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
    }   
  
    /**  
     * 追加文件：使用RandomAccessFile  
     *   
     * @param fileName  
     *            文件名  
     * @param content  
     *            追加的内容  
     */  
    public static void method3(String fileName, String content) {   
        try {   
            // 打开一个随机访问文件流，按读写方式   
            RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");   
            // 文件长度，字节数   
            long fileLength = randomFile.length();   
            // 将写文件指针移到文件尾。   
            randomFile.seek(fileLength);   
            randomFile.writeBytes(content);   
            randomFile.close();   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
    }   


    /**  
     * 追加文件：创建一个目录  
     *   
     * @param fileName  
     * @param content  
     */  
    public static void createRoot(String file, String conent) {    
        try {  
        	File files=new File(file);
        	if(!files.exists())
        	{
        		//System.out.println("conent= " + files.createNewFile() );
        		//System.out.println("conent= " + files.canWrite() );
        		files.mkdirs();
        	}
        } catch (Exception e) {   
            e.printStackTrace();   
        } 
    }   
    
    public static String readString(String file)
    {
    	String con="";
    	 try {  
         	InputStream is = new FileInputStream(file);
            StringBuffer buffer = new StringBuffer();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            con = reader.readLine();       // 读取第一行
            while (con != null) {          // 如果 line 为空说明读完了
            	
            	//con = new String(con.getBytes("gbk"), "utf-8");
                buffer.append(con);        // 将读到的内容添加到 buffer 中
                buffer.append("\n");        // 添加换行符
                con = reader.readLine();   // 读取下一行
            }
         	return buffer.toString();
         } catch (Exception e) {   
             e.printStackTrace(); 
             System.out.println("文件不存在" + e.getMessage());
             return "";
         } 
    }
    public static void main(String[] args) throws IOException {
        /*int sw = 0;     // 三种测试的选择开关
        FileRW test = new FileRW();
        
        switch (sw) {
        case 1: // 测试读
        {
            InputStream is = new FileInputStream("E:\\test.txt");
            StringBuffer buffer = new StringBuffer();
            test.readToBuffer(buffer, is);
            System.out.println(buffer);     // 将读到 buffer 中的内容写出来
            is.close();
            break;
        }
        case 2: // 测试写
        {
            StringBuffer buffer = new StringBuffer("Only a test\r\n");
            test.writeFromBuffer(buffer, System.out);
            break;
        }
        case 3: // 测试拷贝
        {
            test.copyTextFile("E:\\test.txt", "E:\\r.txt");
        }
            break;
        }
        String timeroot=new SimpleDateFormat("yyyyMM").format(new java.util.Date ().getTime());
        timeroot="d:\\test\\"+timeroot;
		createRoot(timeroot, "\r\n");
        String time=new SimpleDateFormat("yyyyMMdd").format(new java.util.Date ().getTime())+".txt";
        method1(timeroot+"\\"+time, "\r\nfgfhg");
        System.out.println("start");   
        method1("E:\\test.txt", "\r\n追加到文件的末尾");   
        System.out.println("end"); */  
    	//System.out.println(readString("/home/cellgame/tomcat6/webapps/ROOT/file/list/CMD_CT_NETLIST/p20090923114647.txt"));
    	//System.out.println(readString("D:\\workspace\\cartoon\\ROOT\\file\\list\\CMD_CT_NETLIST\\p20090923111633.txt"));
        //System.out.println("readString()= " +readString("E:\\test3.txt"));
    }



}
